|
1
|
|
|
import fs from 'fs'; |
|
2
|
|
|
import { all, promisify } from 'bluebird'; |
|
3
|
|
|
import { |
|
4
|
|
|
curry, |
|
5
|
|
|
mapObjIndexed, |
|
6
|
|
|
mergeAll, |
|
7
|
|
|
prop, |
|
8
|
|
|
values |
|
9
|
|
|
} from 'ramda'; |
|
10
|
|
|
import Table from 'cli-table'; |
|
11
|
|
|
import { runAndGetAlerts, getProperties } from './vm'; |
|
12
|
|
|
import { ask } from './input'; |
|
13
|
|
|
import { compileES6 } from './compiler'; |
|
14
|
|
|
import { read } from './db'; |
|
15
|
|
|
import { getLocale, getLocaleStrings } from './i18n'; |
|
16
|
|
|
import { compileModulesFromSource } from './module'; |
|
17
|
|
|
import live from './live'; |
|
18
|
|
|
|
|
19
|
|
|
const percentOf = curry((value, percent) => value / 100 * percent); |
|
20
|
|
|
|
|
21
|
|
|
export const readFile = promisify(fs.readFile); |
|
22
|
|
|
|
|
23
|
|
|
function tableView(alerts) { |
|
24
|
|
|
const valuesFrom = mapObjIndexed(({ title, content = '', comment = '' }, key) => |
|
25
|
|
|
[key, title, content, comment]) & values; |
|
26
|
|
|
|
|
27
|
|
|
const table = new Table({ |
|
28
|
|
|
head: ['Key', 'Title', 'Content', 'Comment'], |
|
29
|
|
|
colWidths: [10, 20, 35, 26].map(percentOf(process.stdout.columns || 100) & Math.round) |
|
30
|
|
|
}); |
|
31
|
|
|
|
|
32
|
|
|
table.push(...valuesFrom(alerts)); |
|
33
|
|
|
return table.toString(); |
|
34
|
|
|
} |
|
35
|
|
|
|
|
36
|
|
|
export function compileSources() { |
|
37
|
|
|
return readFile('index.js', 'utf-8') |
|
38
|
|
|
.then(index => all([compileES6(index), compileModulesFromSource(index)])); |
|
39
|
|
|
} |
|
40
|
|
|
|
|
41
|
|
|
/** |
|
42
|
|
|
* Executes a function with the provided parameters |
|
43
|
|
|
* |
|
44
|
|
|
* @param {Object} params |
|
45
|
|
|
*/ |
|
46
|
|
|
export const executeWithParams = params => readFile('package.json', 'utf-8') |
|
47
|
|
|
.then(JSON.parse) |
|
48
|
|
|
.then(({ name }) => all([name, read(name), getLocaleStrings(), getLocale()])) |
|
49
|
|
|
.spread((name, db, strings, locale) => compileSources() |
|
50
|
|
|
.spread((source, modules) => runAndGetAlerts( |
|
51
|
|
|
{ name, source }, { params, db, locale }, strings, modules))) |
|
52
|
|
|
.get('alerts'); |
|
53
|
|
|
|
|
54
|
|
|
export default args => readFile('package.json', 'utf-8') |
|
55
|
|
|
.then(JSON.parse) |
|
56
|
|
|
.then(({ name }) => all([name, read(name), getLocaleStrings(), getLocale()])) |
|
57
|
|
|
.spread((name, db, strings, locale) => compileSources() |
|
58
|
|
|
.spread((source, modules) => getProperties({ name, source }, strings, modules) |
|
59
|
|
|
.then(prop('params') & ask) |
|
60
|
|
|
.then(mergeAll) |
|
61
|
|
|
.then(params => all([ |
|
62
|
|
|
runAndGetAlerts({ name, source }, { params, db, locale }, strings, modules), |
|
63
|
|
|
params |
|
64
|
|
|
])))) |
|
65
|
|
|
.spread(({ alerts }, params) => { |
|
66
|
|
|
if (args.live) { |
|
67
|
|
|
return live(alerts, params); |
|
68
|
|
|
} |
|
69
|
|
|
console.log(args.raw ? alerts : tableView(alerts)); |
|
|
|
|
|
|
70
|
|
|
}); |
|
71
|
|
|
|